It is known that load balancing can be used to distribute tasks among a plurality of resources to avoid overloading of any single resource, to increase overall system throughput, and to reduce response time. However, conventional load balancing often fails to take into account that not all clients, from which the tasks are received, are the same, and not all resources that perform the tasks are the same.